package es.uniovi.asw.trivial.db.impl.remote; import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStreamReader; import java.net.UnknownHostException; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import com.mongodb.BasicDBList; import com.mongodb.DB; import com.mongodb.DBCollection; import com.mongodb.DBCursor; import com.mongodb.DBObject; import com.mongodb.MongoClient; import com.mongodb.MongoCredential; import com.mongodb.ServerAddress; import es.uniovi.asw.trivial.db.RemoteDB; import es.uniovi.asw.trivial.db.impl.local.persistencia.model.Pregunta; import es.uniovi.asw.trivial.db.impl.local.persistencia.model.Respuesta; public class RemoteMongoDB implements RemoteDB { /** * Este metodo se conecta con la base de datos remota y obtiene las * preguntas almacenadas, recogiendolas en una List de objetos Pregunta * * @return List<Pregunta> lista de preguntas cargadas desde la base de datos * remota */ public List<Pregunta> cargarPreguntas() { List<Pregunta> listaPreguntas = new ArrayList<Pregunta>(); MongoClient mongoClient = null; BufferedReader br = null; try { br = new BufferedReader(new InputStreamReader(getClass().getClassLoader().getResourceAsStream("db/userReader.mongouser"))); String user = ""; String pass = ""; while (br.ready()) { String linea = br.readLine(); if (linea.contains("user=")) user = linea.split("=")[1]; else if (linea.contains("pass=")) pass = linea.split("=")[1]; } br.close(); MongoCredential mongoCredential = MongoCredential .createMongoCRCredential(user, "trivial", pass.toCharArray()); mongoClient = new MongoClient(new ServerAddress( "ds062797.mongolab.com", 62797), Arrays.asList(mongoCredential)); // Conectar con nuestra base de datos DB db = mongoClient.getDB("trivial"); System.out.println("Conexion creada con la base de datos"); DBCollection preguntas = db.getCollection("preguntas"); DBCursor cursor = preguntas.find(); while (cursor.hasNext()) { DBObject preguntaJSON = cursor.next(); String enunciado = (String) preguntaJSON.get("enunciado"); String categoria = (String) preguntaJSON.get("categoria"); BasicDBList respuestas = (BasicDBList) preguntaJSON .get("respuestas"); Pregunta pregunta = new Pregunta(enunciado, categoria); for (int i = 0; i < respuestas.size(); i++) { DBObject respuestaJSON = (DBObject) respuestas.get(i); Respuesta respuesta = new Respuesta( (String) respuestaJSON.get("respuesta"), (Boolean) respuestaJSON.get("isCorrecta")); // pregunta.getRespuestas().add(respuesta); pregunta.addRespuesta(respuesta); } listaPreguntas.add(pregunta); } cursor.close(); } catch (UnknownHostException e) { e.printStackTrace(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if (mongoClient != null) mongoClient.close(); } return listaPreguntas; } }